package com.dkd.day20250727;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main41 {
    //给定一组闭区间，其中部分区间存在交集。
    //
    //任意两个给定区间的交集，称为公共区间(如:[1,2],[2,3]的公共区间为[2,2]，[3,5],[3,6]的公共区间为[3,5])。
    //
    //公共区间之间若存在交集，则需要合并(如:[1,3],[3,5]区间存在交集[3,3]，需合并为[1,5])。
    //
    //按升序排列输出合并后的区间列表。
    //
    //输入描述
    //一组区间列表，
    //
    //区间数为 N: 0<=N<=1000;
    //
    //区间元素为 X: -10000<=X<=10000。
    //
    //输出描述
    //升序排列的合并区间列表
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] arr = new int[n][2];
        for (int i = 0; i < n; i++) {
            arr[i][0] = sc.nextInt();
            arr[i][1] = sc.nextInt();
        }
        solve(arr);
    }

    public static void solve(int[][] arr) {
        Arrays.sort(arr, (a, b) -> a[0] - b[0]);

        ArrayList<Integer[]> list = new ArrayList<>();

        for (int i = 0; i < arr.length; i++) {
            int s1 = arr[i][0];
            int e1 = arr[i][1];
            for (int j = i + 1; j < arr.length; j++) {
                int s2 = arr[j][0];
                int e2 = arr[j][1];
                if (s2<e1) {
                    list.add(new Integer[]{s2, Math.min(e2,e1)});
                }else{
                    break;
                }
            }
        }

        list.sort((a, b) -> a[0] - b[0]==0?a[1]-b[1]:a[0]-b[0]);

        Integer[] pre = list.get(0);
        for (int i = 1; i < list.size(); i++) {
            Integer[] cur = list.get(i);
            //判断是否能合并,能就合并，不能就输出
            if (cur[0]<=pre[1]) {
                pre[1] = Math.max(pre[1],cur[1]);
            }else{
                System.out.println(pre[0]+" "+pre[1]);
                pre = cur;
            }
        }
        System.out.println(pre[0]+" "+pre[1]);
    }
}
